package Five;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;

/**
 * @author 长风无言
 */
public class PlayGame {

    public static void main(String[] args) {

        //初始化为2，留出最前面的两个位置插入大小王，满足从小到大的关系
        int index=2;
        //创建一个HashMap用于存放每一张牌和对应的key值，key越小牌越大
        HashMap<Integer, String> card= new HashMap<Integer, String>();
        //创建一个ArrayList用于存放牌的key值
        ArrayList<Integer> cardNum = new ArrayList<Integer>();
        //从大到小存放2~3的牌
        String[] numbers = { "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3" };
        //按顺序把2~3放进card的对应key值2~14
        for(String number :numbers){
            card.put(index++,number);
        }
        //每一种key值都放进牌堆
        for(int i=0;i<13;i++) {
            //每一种牌有四张
            for (int j = 0; j < 4; j++) {
                //2~14的key值
                cardNum.add(i+2);
            }
        }
        //大小王最大，放最前面.分别对应key值0和1
        card.put(0, "大王");
        card.put(1, "小王");
        //大小关系且对应保证只有一个大小王
        cardNum.add(0);
        cardNum.add(1);
        //打乱顺序
        Collections.shuffle(cardNum);
        //创造三个牌手和一个底牌堆
        ArrayList<Integer> player1 = new ArrayList<Integer>();
        ArrayList<Integer> player2 = new ArrayList<Integer>();
        ArrayList<Integer> player3 = new ArrayList<Integer>();
        ArrayList<Integer> bottom = new ArrayList<Integer>();
        
        //前三张作为底牌，后面一人一张
        for (int i = 0; i < cardNum.size(); i++) {
            if (i < 3) {
                bottom.add(cardNum.get(i));
            } else if (i % 3 == 0) {
                player1.add(cardNum.get(i));
            } else if (i % 3 == 1) {
                player2.add(cardNum.get(i));
            } else if (i % 3 == 2) {
                player3.add(cardNum.get(i));
            }
        }
        //给牌手和牌堆的牌序号从小到大排序
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(bottom);
        //函数显示所有牌手手牌
        show("Player1",player1,card);
        show("Player2",player2,card);
        show("Player3",player3,card);
        show("BottomCard",bottom,card);
    }
/**
 * description: 
 * 
 * @param name  牌手姓名
 * @param player 牌手手牌key值
 * @param card  key值与对应的牌
 * @return void
 */
    public static void show(String name,ArrayList<Integer> player, HashMap<Integer, String> card){
        System.out.print(name+": ");
        //遍历牌手拥有的key值
        for (Integer key : player) {
            //根据手中的key值找到对应的牌
            String value = card.get(key);
            //打印每一张牌
            System.out.print(value + " ");
        }
        //一个牌手所有手牌打印完后换行
        System.out.println("");
    }

}
